package com.hup.sokoban.mvp;

import com.hup.sokoban.model.common.MapItem;

import java.util.List;

/**
 * @author hugan
 * @date 2020/4/30
 */
public interface MapDesignerMvp {

    interface MapDesignerPresenter {

        List<MapItem> reloadMapList();

        /**
         * 比较两个Map的数据(仅设计关卡时用户能修改的数据)是否一样
         * @param curMap 当前的map
         * @param lastLoadedMap 上传保存过的map
         */
        boolean isSame(MapItem curMap, MapItem lastLoadedMap);

        /**
         * 仅复制map的数据
         * @param curMap 被覆盖的map
         * @param source 数据源
         */
        void copyMapData(MapItem curMap, MapItem source);

        void doDelete(MapItem mapItem);

        /**
         * 调用前要执行 {@link MapItem#updateMapSafeFields()}, {@link MapItem#refreshRecordsState()}
         * @param curMap 被修改的关卡
         * @param lastLoadedMap 上次保存的关卡
         * @return 是否要删除[游戏记录]:改变了地图元素且有记录时返回true
         */
        boolean needDeleteMapRecords(MapItem curMap, MapItem lastLoadedMap);

        void checkAndSaveMap(MapItem map, MapItem lastLoadedMap);
    }

}
